/**
 * API接口模块
 * 使用新的HTTP工具库
 */

// 导入HTTP请求工具
import http from './http.js'
// 导入基于STS的OSS操作工具
import { uploadToOSS, deleteOSSFile } from './oss-sts.js'

// 首页banner
export const getBanner = (aid = 0) => {
	//token格式只是请求login接口返回的字符串，在登录后保存即可这里不需要
	// uni.setStorageSync('token', 'id:4,aid:0');
	return http.get('/index/banner', {
		aid
	})
}
/**
 * 获取机构数据
 * @param {Object} params - 请求参数
 * @param {number} params.aid - 机构ID
 * @param {number} params.latitude - 纬度
 * @param {number} params.longitude - 经度
 */
export const getAgenc = (params = {}) => {
	//token格式只是请求login接口返回的字符串，在登录后保存即可这里不需要
	// uni.setStorageSync('token', 'id:4,aid:0');
	
	// 构建请求数据，包含aid和可选的经纬度参数
	const requestData = {
		aid: params.aid || 0
	};
	
	// 如果提供了经纬度参数，添加到请求数据中
	if (params.latitude !== undefined && params.longitude !== undefined) {
		requestData.latitude = params.latitude;
		requestData.longitude = params.longitude;
	}
	
	return http.get('/index/agenc', requestData)
}
// 机构列表
/**
 * 获取机构列表
 * @param {Object} params - 请求参数
 * @param {number} params.pagenum - 页码
 * @param {number} params.pagesize - 每页数量
 * @param {number} params.latitude - 纬度（可选）
 * @param {number} params.longitude - 经度（可选）
 */
export const getAgencList = (params = {}) => {
	//token格式只是请求login接口返回的字符串，在登录后保存即可这里不需要
	// uni.setStorageSync('token', 'id:4,aid:0');
    
    // 构建请求数据，包含分页参数和可选的经纬度参数
    const requestData = {
        pagenum: params.pagenum || 1,
        pagesize: params.pagesize || 10
    };
    
    // 如果提供了经纬度参数，添加到请求数据中
    if (params.latitude !== undefined && params.longitude !== undefined) {
        requestData.latitude = params.latitude;
        requestData.longitude = params.longitude;
    }
	return http.get('/agenc/list', requestData)
}
// 机构详情
// @param {number} id - 机构ID，将作为路径参数
// @returns {Promise} 返回机构详情数据
// 接口形式: /index/agenc/{id}
export const getAgencDetails = (id) => {
	// 使用模板字符串将id参数嵌入到URL路径中
	return http.get(`/agenc/${id}`)
}
// 机构入驻表单提交接口
// @param {Object} formData - 表单数据对象
// @returns {Promise} 返回提交结果
/**
 * 提交机构入驻表单数据
 * 用于处理用户点击提交按钮后的数据提交操作
 * 此函数将表单数据通过HTTP POST请求发送到后端接口
 */
export const getInsFormSub = (formData) => {
	return http.post('/agenc/add', formData)
}

// 提交招聘申请表单
export const submitRecruitmentForm = (formData) => {
	return http.post('/apply/add', formData)
}

// 示例：带自定义header的请求
export const getDataWithCustomHeader = (data) => {
	return http.post('/custom/endpoint', data, {
		header: {}
	})
}

// 示例：上传文件（form-data格式）
export const uploadFile = (formData) => {
	return http.post('/upload', formData, {
		header: {
			'Content-Type': 'multipart/form-data'
		}
	})
}

// 示例：发送表单数据
export const submitForm = (formData) => {
	return http.post('/form/submit', formData, {
		header: {
			'Content-Type': 'application/x-www-form-urlencoded'
		}
	})
}

// 从http.js导入defaultConfig
import { defaultConfig } from './http.js'

/**
 * 统一的OSS文件上传接口
 * @param {string} filePath - 文件路径
 * @param {string} type - 文件类型标识（logo, license, certificate等）
 * @param {string} category - 分类（agency或apply，默认agency）
 * @returns {Promise<Object>} 上传结果
 */
export const uploadImageToOSS = async (filePath, type, category = 'agency') => {
	try {
		// 验证参数
		if (!filePath) {
			throw new Error('文件路径不能为空')
		}
		if (!type) {
			throw new Error('文件类型不能为空')
		}
		
		console.log('开始OSS上传：', filePath, '类型：', type, '分类：', category)
		
		// 使用OSS直传
		const result = await uploadToOSS(filePath, type, category)
		
		console.log('OSS上传成功:', result)
		return result
		
	} catch (error) {
		console.error('文件上传失败:', error)
		throw new Error(`上传文件失败: ${error.message}`)
	}
}

// 保持向后兼容的方法
export const uploadImageForAgency = (filePath, type) => uploadImageToOSS(filePath, type, 'agency')
export const uploadImageForApply = (filePath, type) => uploadImageToOSS(filePath, type, 'apply')

// 批量上传图片到OSS
export const batchUploadImagesForAgency = async (filePaths, type = 'img') => {
	try {
		const results = []
		
		for (let i = 0; i < filePaths.length; i++) {
			const filePath = filePaths[i]
			const result = await uploadImageForAgency(filePath, `${type}_${i}`)
			results.push(result)
		}
		
		return results
	} catch (error) {
		console.error('批量上传失败:', error)
		throw new Error(`批量上传失败: ${error.message}`)
	}
}

// 删除OSS文件
export const deleteOSSFileForAgency = async (fileUrl) => {
	try {
		if (!fileUrl) {
			throw new Error('文件URL不能为空')
		}
		
		console.log('删除OSS文件:', fileUrl)
		
		const result = await deleteOSSFile(fileUrl)
		
		console.log('OSS文件删除成功:', result)
		return result
		
	} catch (error) {
		console.error('删除文件失败:', error)
		throw new Error(`删除文件失败: ${error.message}`)
	}
}

// 示例：不需要token的公开接口
export const getPublicData = () => {
	return http.get('/public/data', {}, {
		header: {
			'token': null // 明确不发送token
		}
	})
}

// ========== 登录相关接口 ==========

/**
 * 微信小程序登录 - 完整用户信息登录
 * @param {Object} loginData 登录数据
 * @param {String} loginData.code 微信登录code
 * @param {Object} loginData.userInfo 微信用户基本信息（头像、昵称等）
 * @param {String} loginData.encryptedData 加密的手机号数据
 * @param {String} loginData.iv 初始向量
 * @param {String} loginData.cloudID 云函数ID（可选）
 */
export const wxLogin = (loginData) => {
	console.log('🚀 调用微信登录接口，参数:', loginData)

	/* 
	真实接口调用代码（后期启用）：*/
	return http.post('/wx/login', {
		code: loginData.code,
		userInfo: loginData.userInfo,
		encryptedData: loginData.encryptedData,
		iv: loginData.iv,
		cloudID: loginData.cloudID
	})
}

/**
 * 检查登录状态和获取用户信息
 */
export const checkLoginStatus = () => {
	console.log('🔍 检查登录状态...')

	// 模拟检查登录状态
	return new Promise((resolve, reject) => {
		const token = uni.getStorageSync('token')
		const userInfo = uni.getStorageSync('userInfo')

		if (token && token !== '') {
			setTimeout(() => {
				// 模拟token验证成功，返回完整用户信息
				const mockUserData = {
					valid: true,
					userInfo: userInfo || {
						id: 10001,
						openid: 'ox1234567890abcdef1234567890abcdef',
						unionid: 'ux9876543210fedcba9876543210fedcba',
						nickname: '微信用户',
						avatar: 'https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKxrqq7f7VgKw8Y5Hibd9NTpzQVF24OlOP4w8qKqFBTjjEXHi/132',
						phone: '13800138000',
						gender: 1,
						country: '中国',
						province: '广东',
						city: '深圳',
						status: 1,
						vipLevel: 0,
						lastLoginTime: new Date().toISOString()
					},
					permissions: [
						'user.profile.view',
						'user.profile.edit',
						'course.view',
						'activity.view',
						'consult.book'
					]
				}

				console.log('✅ Token验证成功，用户信息:', mockUserData.userInfo)
				resolve(mockUserData)
			}, 500)
		} else {
			console.log('❌ 未找到有效token')
			reject({
				valid: false,
				message: '未登录',
				code: 401
			})
		}
	})

	/* 
	真实接口调用代码（后期启用）：
	return http.get('/auth/check-status')
	*/
}

/**
 * 退出登录
 */
export const logout = () => {
	// TODO: 后期需要替换为真实的退出接口
	console.log('退出登录')

	// 清除本地存储
	uni.removeStorageSync('token')
	uni.removeStorageSync('userInfo')

	// 模拟退出请求
	return Promise.resolve({
		success: true
	})

	// 真实接口调用代码（后期启用）：
	// return http.post('/auth/logout')
}

/**
 * 导航到机构详情并获取数据
 * @param {String} url - 目标页面URL
 * @param {String} id - 机构ID
 * @returns {Promise} 返回机构详情数据
 */
export const navigateToInsDetails = (url, id) => {
	console.log('调用导航到机构详情接口，URL:', url, 'ID:', id)
	// 模拟接口调用，返回mock数据
	return Promise.resolve({
			id: id,
			name: '中科博爱（北京）咨询有限公司',
			address: '北京市顺义区后沙峪地区绿地启航国际南区2号楼7层',
			contact: '13755678956',
			tel: '13755678956',
			area: '200平米',
			roomCount: '5间',
			businessHours: '09 : 00 - 18 : 00',
			openstart: '09:00',
			openend: '18:00',
		latitude: 40.1184,
		longitude: 116.5980,
		introduction: '中科博爱（北京）咨询有限公司是一家专业的心理咨询机构，提供个人心理咨询、团体心理辅导、心理健康评估等服务。',
		services: ['个人心理咨询', '团体心理辅导', '心理健康评估', '心理危机干预']
	})

	// 真实接口调用代码（后期启用）：
	// return http.get(`/agenc/${id}/details`, { url: url })
}